/**
* \file Forme.h
* Définie les fonctions utilisées dans Forme.cpp
*/

#ifndef FORME_H
#define FORME_H

#include<stdio.h>
#include"Constantes.h"
#include"Terrain.h"
//#include"AfficheJeuSDL.h"

/**
 * \struct Forme
 * \brief définie une forme en fonction du type de forme, de ses coordonnées et de son orientation
 */

struct forme
{
    StyleForme numforme; /*! StyleForme est un type défini dans Constantes.h */
    int orientation;
    int positionXforme;
    int positionYforme;

};
typedef struct forme Forme;

/**
* \brief Permet aux autres modules d'avoir acces aux pièces
* \param f permet l'accès à l'orientation et au numéro de la forme à retourner
* \return la forme entière
*/
Case *FormeGetPiece(Forme f);

void FormeInitialise(Forme* f, Terrain t);

void FormeAffichagePiece(Forme f);

/**
* \brief Deplace sur le terrain, la forme d'une case vers la droite
* \pre Le terrain doit être initialisé
*/
void FormeDeplacerDroite(Forme *f, Terrain *t);

/**
* \brief Deplace sur le terrain, la forme d'une case vers la gauche
* \pre Le terrain doit être initialisé
*/
void FormeDeplacerGauche(Forme *f, Terrain *t);

/**
* \brief Deplace sur le terrain, la forme d'une case vers le bas
* \pre Le terrain doit être initialisé
*/
void FormeDeplacerBas(Forme *f, Terrain *t);

/**
* \brief Test si il y a colision entre deux formes
* \pre Le terrain doit être initialisé
* \param x coordonnée en x de l'endroit du terrain où l'on veut tester la collision
* \param y coordonnée en y de l'endroit du terrain où l'on veut tester la collision
* \return faux si il y a colision vrai sinon
*/
bool FormeTestColision(Forme f,Terrain t,int x,int y);

/**
* \brief Pivote la forme de 90° vers la droite
* \param f permet d'acceder à l'orientation de la forme
*/
void FormePivoter(Forme f);

/**
* \param f donne la position de la case la plus à gauche sur l'axe x
* \return la coordonnée en x de la forme
*/
int FormeGetPositionX(Forme f);

/**
* \param f donne la position de la case la plus en haut sur l'axe y
* \return la coordonnée en y de la forme
*/
int FormeGetPositionY(Forme f);

//void FormeNouvellePiece(Forme * pieceactuelle,Forme * piecesuivante);





#endif
